package org.xx.armory.rpc.routing;

import org.xx.armory.service.ServiceNotFoundException;

import static org.apache.commons.lang3.StringUtils.trimToEmpty;

/**
 * 表示找不到指定类型或方法的异常。
 *
 * @author Haart
 */
public class NoClassMethodException
        extends ServiceNotFoundException {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private final String className;
    private final String methodName;

    /**
     * 构造{@code NoClassMethodException}异常实例。
     *
     * @param className
     *         类型名。
     * @param methodName
     *         方法名。
     */
    public NoClassMethodException(
            String className,
            String methodName
    ) {
        this(className, methodName, null);
    }

    /**
     * 构造{@code NoClassMethodException}异常实例。
     *
     * @param className
     *         类型名。
     * @param methodName
     *         方法名。
     * @param cause
     *         导致此异常的原因 。
     */
    public NoClassMethodException(
            String className,
            String methodName,
            Throwable cause
    ) {
        super("cannot find method " + trimToEmpty(className) + "." + trimToEmpty(methodName), cause);
        this.className = trimToEmpty(className);
        this.methodName = trimToEmpty(methodName);
    }

    /**
     * 获取模块的类名。
     *
     * @return 模块的类名。
     */
    public final String getClassName() {
        return this.className;
    }

    /**
     * 获取模块的方法名。
     *
     * @return 模块的方法名。
     */
    public final String getMethodName() {
        return this.methodName;
    }
}
